Skip to main content

Penjelasan Praktikum

Week 6

Mata Kuliah: Pemrograman Berorientasi Object


COURSE DESCRIPTION

This course is an introduction to the fundamental concepts of Object-Oriented Programming (OOP) paradigm. Students will gain understanding of basic programming principles and progressively explore into the core concepts of OOP, including classes, objects, constructors, encapsulation, polymorphism, and inheritance. The course emphasizes practical application, encouraging students to design, implement, test, and debug solutions for small systems within a collaborative technical team setting.

COURSE GOAL

Setelah mengikuti praktikum ini, mahasiswa mampu:

  • Develop strong foundation in basic programming principles, fostering their ability to write code, utilize variables, and implement fundamental algorithms..
  • Build knowledge of the essential OOP concepts, including classes, objects, constructors, encapsulation, polymorphism, and inheritance, laying the groundwork for understanding modular and scalable coding practices.
  • Develop ability to apply theoretical knowledge in practical scenarios, emphasizing collaborative teamwork.
  • Develop ability to design, implement, test, and debug solutions for small systems, fostering hands-on learning and problem-solving skills.

COURSE LEARNING OUTCOMES (CLOs)

Week1Course Learning OutcomesSubjectCode
1Explain basic programming conceptsBasic programmingCLO-1
2Explain basic programming conceptsIDE software installation and Introduction to python programmingCLO-1 - CLO2
21. Explain basic programming concepts 2. Explain the elements that make up an object (class, instance, method, class variable)- OOP paradigm concepts (Class, Object, Constructor) -Elements that make up an object (Class, instance, method, class variable)CLO-2- CLO 3

Task

  1. Lengkapilah potongan code python berikut ini untuk membuat UI Sistem Monitoring
import tkinter as tk
from tkinter import messagebox
import serial

class MonitorApp:
def __init__(self, root):
...

def _setup_ui(self):
...

def _create_widgets(self, parent, label_text, min_val, max_val):
...

def _validate_input(self, entry, min_val, max_val):
...

# Jalankan program
if __name__ == "__main__":
root = tk.Tk()
app = MonitorApp(root)
root.mainloop()

  1. Lengkapilah potongan kode arduino berikut ini, agar bisa berkomunikasi dan menerima input dari UI yang telah di buat sebelumnya

#include <Servo.h> // Library untuk servo

// Pin untuk Motor DC
#define ... // Pin PWM untuk mengontrol kecepatan motor
#define ... // Pin untuk mengontrol arah motor
#define ... // Pin untuk mengontrol arah motor

String buff, buff_motor;
const char delimiter[] = ":"; // Pemisah
int motor;

void setup() {
Serial.begin(115200);

pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);

stopMotor(0); // Pastikan motor berhenti saat awal
}

void loop() {
if (Serial.available() > 0) {
buff = Serial.readString(); // Baca data dari serial

if (buff[0] == 'M'){
...
}
}
}

void forward(int num) {
...
}

void reverse(int num) {
...
}

void stopMotor(int num) {
...
}
  1. Kompile dan upload kode arduino ke board arduino lalu close arduino IDE

  2. Jalankan file Python UI dan coba inputkan data pada RPM dan Drajat Servo, Untuk membuktikan bahwa sistem sudah berjalan dengan benar Seperti gambar di bawah ini. alt text

  3. Tambahkan Handshaking sebagai feedback ketika data di inputkan ke dari UI untuk mengetahui bawah arduino sudah berhasil menerima inputan tersebut Seperti gambar di bawah ini. alt text

Contoh

  • Sebagai contoh bisa pahami code berikut ini
import tkinter as tk
import serial
#from serial import Serial
from tkinter import messagebox

class Monitor:
def __init__(self, root):
self.root = root
self.root.title("Monitor")
self.root.geometry("400x200")

self.judul = ["Motor", "Servo"]
self.entries = []
self.create_widgets()

try:
self.serial_conn = serial.Serial('COM4', 115200, timeout=1)
except serial.SerialException:
messagebox.showerror("Error", "Tidak bisa membuka port COM3. Pastikan perangkat terhubung.")
self.serial_conn = None

def create_widgets(self):
for i, field in enumerate(self.judul):
tk.Label(self.root, text=f"{field}:").grid(row=i*2, column=0, padx=10, pady=5, sticky="w")

entry = tk.Entry(self.root)
entry.grid(row=i*2 + 1, column=0, padx=10, pady=5, sticky="w")
self.entries.append(entry)

tk.Button(self.root, text="OK", command=lambda e=entry, f=field: self.submit(e, f)).grid(row=i*2 + 1, column=1, padx=5, pady=5)

def submit(self, entry_field, label_text):
value = entry_field.get()
if value.isdigit() and 0 <= int(value) <= 200:
messagebox.showinfo("Sukses", f"{label_text} sebesar: {value}")

if self.serial_conn and self.serial_conn.is_open:
try:
self.serial_conn.write(f"{label_text}:{value}\n".encode())
except serial.SerialException:
messagebox.showerror("Error", "Gagal mengirim data ke perangkat Serial.")
else:
messagebox.showwarning("Error", f"yang bener masukin angkanya {label_text}!")

if __name__ == "__main__":
root = tk.Tk()
app = Monitor(root)
root.mainloop()